import math

D = 3  # Диаметр отсека в м
L = 1.3  # Длина отсека в м
DELTHA = 1.6 / 1000  # Толщина стенки отсека в м

N = 4000 * 1000  # Сжимающая сила в Н
M = 700 * 1000  # Крутящий момент в Н*м

E = 72000 * 10**6  # Модуль Юнга материала в Па
RO = 2700  # плотность материала, кг/м3
SIGMA_T = 280 * 10**6  # предел текучести, Па
SIGMA_V = 400 * 10**6  # предел прочности, Па

K = 0.46  # Коэффициент для шарнирно опёртой с одной и свободной с
# другой стороны пластины (полки профиля)

f = 1.1  # коэффициент безопасности

Ne = math.ceil(N + 2 * M / (D / 2))  # Эквивалентная нагрузка, Н


Nr = f * Ne  # Расчётная нагрузка, Н
VAR_SIG = 0.4  # варьируем запас, чтобы рассчитать количество стрингеров

sigma_r = SIGMA_T * VAR_SIG  # расчетное напряжение
b_pr = 1.9 * DELTHA * math.sqrt(E / (sigma_r - 0.2 * E * DELTHA / D))
n_pr = math.ceil(math.pi * D / b_pr)  # предварительный шаг стрингеров
n = 175  # принятое количество стрингеров
b = math.pi * D / n  # Шаг между стрингерами с учётом нового количества

Nc = (Nr - math.pi * D * DELTHA * sigma_r) / n  # Сжимающая сила в стрингере, Н

F = Nc / sigma_r  # Необходимая площадь стрингера, м2

# т.к. между строками внутри print ниже нет запятой, то они автоматически сшиваются
b_ug = 40 / 1000  # сторона уголка, м
h_ug = 2.5 / 1000  # Толщина стенки, м


F_SQR = 1.945 * 10 ** (-4)  # для уголка

sigma_d = Nc / F_SQR  # Действующее напряжение в стрингере


# Проверка на местную устойчивость по Эйлеру
sigma_m_kr = K * (math.pi**2) * E * ((h_ug / b_ug) ** 2) / (12 * (1 - 0.3**2))

# Проверка на общую устойчивость по Эйлеру

# Находим Y координату нейтральной линии
y = (
    b * DELTHA * DELTHA / 2
    + h_ug * b_ug * (DELTHA + h_ug / 2)
    + (b_ug - h_ug) * h_ug * (DELTHA + (b_ug - h_ug) / 2 + h_ug)
) / (b * DELTHA + b_ug * h_ug + (b_ug - h_ug) * h_ug)
y = round(y, 3)

# Находим суммарный момент инерции стрингера и обшивки
J = (
    h_ug / 12 * (b_ug - h_ug) ** 3
    + b / 12 * DELTHA**3
    + b_ug / 12 * h_ug**3
    + b * DELTHA * (y - DELTHA / 2) ** 2
    + b_ug * h_ug * (y - (DELTHA + h_ug / 2)) ** 2
    + (b_ug - h_ug) * h_ug * (y - (DELTHA + (b_ug - h_ug) / 2 + h_ug)) ** 2
)


lyambda = L * math.sqrt((b * DELTHA + F_SQR) / J)  # гибкость стрингера лямбда

sigma_kr_E = (
    2 * E * (math.pi / lyambda) ** 2
)  # напряжение потери общей устойчивости по Эйлеру

KZ_ust = sigma_kr_E / sigma_d  # коэффициент запаса по устойчивости
KZ_ust = round(KZ_ust, 3)

SQR_OTSEK = (b * DELTHA + F_SQR) * n
MassSum = SQR_OTSEK * L * RO  # Масса отсека, кг
MassSum = round(MassSum, 2)

# В комментариях вывод промежуточных результатов для верификации расчёта
"""
print(Ne)
print("Шаг между стрингерами с учётом нового количества", b)
print("Сжимающая сила в стрингере", Nc)
print("Необходимая площадь стрингера, см2", F * 10000)
print("площадь уголка", F_SQR)
print("сигма местное", sigma_m_kr)
print("координату нейтральной линии", y)
print("суммарный момент инерции стрингера и обшивки", J)
print("гибкость", lyambda)
print("cсигма общее", sigma_kr_E)
print("коэф-т запаса", KZ_ust)
print("Масса отсека составляет", MassSum, "кг")
"""
